#Tarea 05 #Mineria de Datos I #Ricardo Zamora Mennigke
library(tidyverse)
## -- Attaching packages ------------------------------------------------------------------------------ tidyverse 1.3.0 --
## v ggplot2 3.3.0 v purrr 0.3.3
## v tibble 2.1.3 v dplyr 0.8.5
## v tidyr 1.0.2 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## -- Conflicts --------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(ggplot2)
library(dplyr)
library(glue)
##
## Attaching package: 'glue'
## The following object is masked from 'package:dplyr':
##
## collapse
library(scales)
##
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
##
## discard
## The following object is masked from 'package:readr':
##
## col_factor
Pregunta 1: [25 puntos] En este ejercicio usaremos los datos (voces.csv). Se trata de un problema de reconocimiento de g´enero mediante el an´alisis de la voz y el habla. Esta base de datos fue creada para identificar una voz como masculina o femenina, bas´andose en las propiedades ac´usticas de la voz y el habla. El conjunto de datos consta de 3.168 muestras de voz grabadas, recogidas de hablantes masculinos y femeninos. Las muestras de voz se preprocesan mediante an´alisis ac´ustico en R, utilizando los paquetes de ondas marinas y de sinton´ıa de R, con un rango de frecuencia analizada de 0hz-280hz (rango vocal humano). El conjunto de datos tiene las siguientes propiedades ac´usticas (variables) de cada voz:
Realice lo siguiente:
equilibrio.variable.predecir <- function(datos, variable.predecir, ylab = "Cantidad de individuos",
xlab = "", main = paste("Distribución de la variable",variable.predecir), col = NA) {
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
ggplot(data = datos, mapping = aes_string(x = variable.predecir, fill = variable.predecir)) +
geom_bar() +
scale_fill_manual(values = col, name = variable.predecir) +
labs(x = xlab, y = ylab, title = main) +
theme_minimal() +
theme(legend.position = "bottom")
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}
poder.predictivo.numerica <- function(datos, variable.predecir, variable.comparar, ylab = "",
xlab = "", main = paste("Densidad de la variable", variable.comparar, 'según', variable.predecir), col = NA){
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(missing(variable.comparar) | !(variable.comparar %in% colnames(datos)) | !is.numeric(datos[,variable.comparar])){
stop("variable.comparar tiene que ser ingresada y ser un nombre de columna numérica", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
ggplot(data = datos, aes_string(variable.comparar, fill = variable.predecir)) +
geom_density(alpha = .7, color = NA) +
scale_fill_manual(values = col) +
labs(title = main , y = ylab, x = xlab ,fill = variable.predecir) +
theme_minimal() +
theme(legend.position = 'bottom',
legend.title = element_blank(),
text = element_text(size = 15))
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}
poder.predictivo.categorica <- function(datos, variable.predecir, variable.comparar, ylab = "",
xlab = "", main = paste("Densidad de la variable", variable.comparar, 'según', variable.predecir), col = NA) {
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(missing(variable.comparar) | !(variable.comparar %in% colnames(datos)) |
!(is.factor(datos[,variable.comparar]) | is.character(datos[,variable.comparar])) ){
stop("variable.comparar tiene que ser ingresada y ser un nombre de columna categórica", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
datos2 <- datos %>%
dplyr::group_by_(variable.comparar, variable.predecir) %>%
dplyr::summarise(count = n())
if(variable.comparar != variable.predecir){
datos2 <- datos2 %>% dplyr::group_by_(variable.comparar)
}
datos2 <- datos2 %>% dplyr::mutate(prop = round(count/sum(count),4))
ggplot(data = datos2, mapping = aes_string(x = variable.comparar, y = "prop", fill = variable.predecir)) +
geom_col(position = "fill") +
geom_text(aes(label = glue("{percent(prop)} ({count})")), position = position_stack(vjust = .5), color = "white") +
scale_y_continuous(label = percent) +
labs(y = xlab, x = ylab, title = main) +
scale_fill_manual(values = col, name = variable.predecir) +
theme(legend.position = "bottom")+
coord_flip()
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}
# Índices para matrices NxN
indices.general <- function(MC) {
precision.global <- sum(diag(MC))/sum(MC)
error.global <- 1 - precision.global
precision.categoria <- diag(MC)/rowSums(MC)
res <- list(matriz.confusion = MC, precision.global = precision.global, error.global = error.global,
precision.categoria = precision.categoria)
names(res) <- c("Matriz de Confusión", "Precisión Global", "Error Global",
"Precisión por categoría")
return(res)
}
setwd("C:/Users/rzamoram/Documents/Machine Learning/Mineria de Datos I/Clase3")
datos<-read.csv("voces.csv",dec='.',header=T)
str(datos)
## 'data.frame': 3168 obs. of 21 variables:
## $ meanfreq: num 0.0598 0.066 0.0773 0.1512 0.1351 ...
## $ sd : num 0.0642 0.0673 0.0838 0.0721 0.0791 ...
## $ median : num 0.032 0.0402 0.0367 0.158 0.1247 ...
## $ Q25 : num 0.0151 0.0194 0.0087 0.0966 0.0787 ...
## $ Q75 : num 0.0902 0.0927 0.1319 0.208 0.206 ...
## $ IQR : num 0.0751 0.0733 0.1232 0.1114 0.1273 ...
## $ skew : num 12.86 22.42 30.76 1.23 1.1 ...
## $ kurt : num 274.4 634.61 1024.93 4.18 4.33 ...
## $ sp.ent : num 0.893 0.892 0.846 0.963 0.972 ...
## $ sfm : num 0.492 0.514 0.479 0.727 0.784 ...
## $ mode : num 0 0 0 0.0839 0.1043 ...
## $ centroid: num 0.0598 0.066 0.0773 0.1512 0.1351 ...
## $ meanfun : num 0.0843 0.1079 0.0987 0.089 0.1064 ...
## $ minfun : num 0.0157 0.0158 0.0157 0.0178 0.0169 ...
## $ maxfun : num 0.276 0.25 0.271 0.25 0.267 ...
## $ meandom : num 0.00781 0.00901 0.00799 0.2015 0.71281 ...
## $ mindom : num 0.00781 0.00781 0.00781 0.00781 0.00781 ...
## $ maxdom : num 0.00781 0.05469 0.01562 0.5625 5.48438 ...
## $ dfrange : num 0 0.04688 0.00781 0.55469 5.47656 ...
## $ modindx : num 0 0.0526 0.0465 0.2471 0.2083 ...
## $ genero : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 2 2 2 2 2 2 2 ...
datos$genero <- factor(datos$genero,ordered = TRUE) ##ya es un factor es una linea repetitiva pero que ordena
equilibrio.variable.predecir(datos,"genero")
El problema esta visualmente equilibrado.
indices.general <- function(MC) {
precision.global <- sum(diag(MC))/sum(MC)
error.global <- 1 - precision.global
precision.categoria <- diag(MC)/rowSums(MC)
precision.positiva <- MC[2, 2]/(MC[2, 2] + MC[2, 1])
precision.negativa <- MC[1, 1]/(MC[1, 1] + MC[1, 2])
falsos.positivos <- 1 - precision.negativa
falsos.negativos <- 1 - precision.positiva
asertividad.positiva <- MC[2, 2]/(MC[1, 2] + MC[2, 2])
asertividad.negativa <- MC[1, 1]/(MC[1, 1] + MC[2, 1])
res <- list(matriz.confusion = MC, precision.global = precision.global, error.global = error.global,
precision.categoria = precision.categoria, precision.positiva = precision.positiva, precision.negativa=precision.negativa,
falsos.positivos=falsos.positivos, falsos.negativos=falsos.negativos, asertividad.positiva=asertividad.positiva,
asertividad.negativa=asertividad.negativa)
names(res) <- c("Matriz de Confusión", "Precisión Global", "Error Global", "Precisión por categoría", "Precision Positiva", "Precision Negativa",
"Falsos Positivos", "Falsos Negativos", "Asertividad Positiva", "Asertividad Negativa")
return(res)
}
library(traineR)
library(traineR)
muestra <- sample(1:nrow(datos),floor(nrow(datos)*0.20))
ttesting <- datos[muestra,]
taprendizaje <- datos[-muestra,]
modelo <- train.svm(genero ~ .,data = taprendizaje, kernel = "radial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 317 6
## Masculino 6 304
##
## $`Precisión Global`
## [1] 0.9810427
##
## $`Error Global`
## [1] 0.01895735
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9814241 0.9806452
##
## $`Precision Positiva`
## [1] 0.9806452
##
## $`Precision Negativa`
## [1] 0.9814241
##
## $`Falsos Positivos`
## [1] 0.01857585
##
## $`Falsos Negativos`
## [1] 0.01935484
##
## $`Asertividad Positiva`
## [1] 0.9806452
##
## $`Asertividad Negativa`
## [1] 0.9814241
library(traineR)
modelo <- train.svm(genero ~ .,data = taprendizaje, kernel = "polynomial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 298 25
## Masculino 3 307
##
## $`Precisión Global`
## [1] 0.9557662
##
## $`Error Global`
## [1] 0.04423381
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9226006 0.9903226
##
## $`Precision Positiva`
## [1] 0.9903226
##
## $`Precision Negativa`
## [1] 0.9226006
##
## $`Falsos Positivos`
## [1] 0.07739938
##
## $`Falsos Negativos`
## [1] 0.009677419
##
## $`Asertividad Positiva`
## [1] 0.9246988
##
## $`Asertividad Negativa`
## [1] 0.9900332
library(traineR)
modelo <- train.svm(genero ~ .,data = taprendizaje, kernel = "sigmoid")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 287 36
## Masculino 40 270
##
## $`Precisión Global`
## [1] 0.8799368
##
## $`Error Global`
## [1] 0.1200632
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.8885449 0.8709677
##
## $`Precision Positiva`
## [1] 0.8709677
##
## $`Precision Negativa`
## [1] 0.8885449
##
## $`Falsos Positivos`
## [1] 0.1114551
##
## $`Falsos Negativos`
## [1] 0.1290323
##
## $`Asertividad Positiva`
## [1] 0.8823529
##
## $`Asertividad Negativa`
## [1] 0.8776758
library(traineR)
modelo <- train.svm(genero ~ .,data = taprendizaje, kernel = "linear")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 315 8
## Masculino 9 301
##
## $`Precisión Global`
## [1] 0.9731438
##
## $`Error Global`
## [1] 0.02685624
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9752322 0.9709677
##
## $`Precision Positiva`
## [1] 0.9709677
##
## $`Precision Negativa`
## [1] 0.9752322
##
## $`Falsos Positivos`
## [1] 0.0247678
##
## $`Falsos Negativos`
## [1] 0.02903226
##
## $`Asertividad Positiva`
## [1] 0.97411
##
## $`Asertividad Negativa`
## [1] 0.9722222
library(traineR)
modelo <- train.svm(genero ~ .,data = taprendizaje, kernel = "radial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 317 6
## Masculino 6 304
##
## $`Precisión Global`
## [1] 0.9810427
##
## $`Error Global`
## [1] 0.01895735
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9814241 0.9806452
##
## $`Precision Positiva`
## [1] 0.9806452
##
## $`Precision Negativa`
## [1] 0.9814241
##
## $`Falsos Positivos`
## [1] 0.01857585
##
## $`Falsos Negativos`
## [1] 0.01935484
##
## $`Asertividad Positiva`
## [1] 0.9806452
##
## $`Asertividad Negativa`
## [1] 0.9814241
library(traineR)
modelo <- train.svm(genero ~ .,data = taprendizaje)
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 317 6
## Masculino 6 304
##
## $`Precisión Global`
## [1] 0.9810427
##
## $`Error Global`
## [1] 0.01895735
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9814241 0.9806452
##
## $`Precision Positiva`
## [1] 0.9806452
##
## $`Precision Negativa`
## [1] 0.9814241
##
## $`Falsos Positivos`
## [1] 0.01857585
##
## $`Falsos Negativos`
## [1] 0.01935484
##
## $`Asertividad Positiva`
## [1] 0.9806452
##
## $`Asertividad Negativa`
## [1] 0.9814241
El mejor SVM para este ejercicio es con el default kernel, el radial.
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real Femenino Masculino
## Femenino 317 6
## Masculino 6 304
##
## $`Precisión Global`
## [1] 0.9810427
##
## $`Error Global`
## [1] 0.01895735
##
## $`Precisión por categoría`
## Femenino Masculino
## 0.9814241 0.9806452
##
## $`Precision Positiva`
## [1] 0.9806452
##
## $`Precision Negativa`
## [1] 0.9814241
##
## $`Falsos Positivos`
## [1] 0.01857585
##
## $`Falsos Negativos`
## [1] 0.01935484
##
## $`Asertividad Positiva`
## [1] 0.9806452
##
## $`Asertividad Negativa`
## [1] 0.9814241
El mejor SVM para este ejercicio es con el default kernel, el radial. Posee una precision bastante alta de 0.9873618. Para este ejercicio parece ser el metodo el que mejor se ha ajustado. El arbol de decisio con una precision global de 0.9462875, estuvo mas bajo. Ademas otras estimaciones tardan mas, es decir, redes tarda mas entre mas cantidad de nodos, pero la precision global y el error global en los tres casos de redes se mantienen entre 97 y 98%, y 2% y 3%, respectivamente. De los seis modelos (svm, arbol, 3 redes, kvecinos) tomando precision global como criterio principal y revisando un poco la precision de categorias, SVM radial en este caso tiene la precision mas alta , pero se denota que no existe diferencia significativa, ya que siguiendo la finalidad de este ejercicio se realizan distintas simulaciones para comparar. En la mayoria de los casos la precision de la red neuronal especialmente la de 4 nodos se acerca a la que mejor estimacion de svm radial, pero todas las estimaciones usando k vecinos y redes neuronales con distinta cantidad de nodos, han dado precisiones de entre 96,68% y 98,26% como ocurrio en el de 4 nodos contra 15 nodos, es decir, no se notan diferencias significativas. Los svm con otros kernels tambien han sido bastante acertados, de hecho, puede ser la muestra la que influya en la decision.
Pregunta 2: [25 puntos] En esta pregunta utiliza los datos (tumores.csv). Se trata de un conjunto de datos de caracter´ısticas del tumor cerebral que incluye cinco variables de primer orden y ocho de textura y cuatro par´ametros de evaluaci´on de la calidad con el nivel objetivo. La variables son: Media, Varianza, Desviaci´on est´andar, Asimetr´ıa, Kurtosis, Contraste, Energ´ıa, ASM (segundo momento angular), Entrop´ıa, Homogeneidad, Disimilitud, Correlaci´on, Grosor, PSNR (Pico de la relaci´on se˜nal-ruido), SSIM (´Indice de Similitud Estructurada), MSE (Mean Square Error), DC (Coeficiente de Dados) y la variable a predecir tipo (1 = Tumor, 0 = No-Tumor).
Realice lo siguiente:
setwd("C:/Users/rzamoram/Documents/Machine Learning/Mineria de Datos I/Clase2")
data1<-read.csv("tumores.csv",dec='.',header=T)
head(data1)
## imagen media varianza desviacion.estandar entropia asimetria kurtosis
## 1 Image1 23.448517 2538.9856 50.38835 0.6511741 1.984202 5.421042
## 2 Image2 4.398331 834.8530 28.89382 0.9535317 6.495203 43.349355
## 3 Image3 3.244263 642.0592 25.33889 0.9660645 7.772860 61.756034
## 4 Image4 8.511353 1126.2142 33.55911 0.8687651 3.763142 15.107579
## 5 Image5 21.000793 2235.3170 47.27914 0.6847244 1.936029 4.722343
## 6 Image7 11.350555 998.9722 31.60652 0.7611065 2.533920 7.394586
## contraste energia asm homogeneidad disiminitud correlacion psnr
## 1 181.46771 0.7815569 0.6108312 0.8470333 2.7654114 0.9685761 97.97463
## 2 76.74589 0.9727695 0.9462805 0.9807616 0.5486053 0.9597505 110.34660
## 3 81.75241 0.9801609 0.9607154 0.9850659 0.5404114 0.9442587 112.26630
## 4 362.29121 0.9217862 0.8496899 0.9492953 2.7657252 0.8590271 101.95579
## 5 312.43923 0.8041836 0.6467113 0.8803008 3.0066597 0.9385719 97.63987
## 6 303.94798 0.8542768 0.7297889 0.9023554 3.4405509 0.8664795 99.20658
## ssim mse dc tipo
## 1 0.7770111 0.171163194 0.3039887 1
## 2 0.9779528 0.009913194 0.8390189 1
## 3 0.9853620 0.006371528 0.8497749 1
## 4 0.8810152 0.068437500 0.0000000 0
## 5 0.7663084 0.184878472 0.0000000 0
## 6 0.7948807 0.128888889 0.0000000 0
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
## The following object is masked from 'package:traineR':
##
## contr.dummy
## The following object is masked from 'package:purrr':
##
## lift
data1$tipo <- factor(data1$tipo,ordered = TRUE)
str(data1)
## 'data.frame': 1275 obs. of 18 variables:
## $ imagen : Factor w/ 1275 levels "Image1","Image10",..: 1 614 698 790 871 1030 1108 1194 2 85 ...
## $ media : num 23.45 4.4 3.24 8.51 21 ...
## $ varianza : num 2539 835 642 1126 2235 ...
## $ desviacion.estandar: num 50.4 28.9 25.3 33.6 47.3 ...
## $ entropia : num 0.651 0.954 0.966 0.869 0.685 ...
## $ asimetria : num 1.98 6.5 7.77 3.76 1.94 ...
## $ kurtosis : num 5.42 43.35 61.76 15.11 4.72 ...
## $ contraste : num 181.5 76.7 81.8 362.3 312.4 ...
## $ energia : num 0.782 0.973 0.98 0.922 0.804 ...
## $ asm : num 0.611 0.946 0.961 0.85 0.647 ...
## $ homogeneidad : num 0.847 0.981 0.985 0.949 0.88 ...
## $ disiminitud : num 2.765 0.549 0.54 2.766 3.007 ...
## $ correlacion : num 0.969 0.96 0.944 0.859 0.939 ...
## $ psnr : num 98 110.3 112.3 102 97.6 ...
## $ ssim : num 0.777 0.978 0.985 0.881 0.766 ...
## $ mse : num 0.17116 0.00991 0.00637 0.06844 0.18488 ...
## $ dc : num 0.304 0.839 0.85 0 0 ...
## $ tipo : Ord.factor w/ 2 levels "0"<"1": 2 2 2 1 1 1 2 2 2 2 ...
equilibrio.variable.predecir(data1,"tipo")
Es un problema desbalanceado
intrain <- createDataPartition(
y = data1$tipo,
p = .75,
list = FALSE
)
str(intrain)
## int [1:957, 1] 2 4 5 7 8 9 10 11 12 15 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr "Resample1"
taprendizaje <- data1[ intrain,]
ttesting <- data1[-intrain,]
nrow(taprendizaje)
## [1] 957
nrow(ttesting)
## [1] 318
modelo <- train.svm(tipo ~ .,data = taprendizaje, kernel = "radial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real 0 1
## 0 0 24
## 1 0 294
##
## $`Precisión Global`
## [1] 0.9245283
##
## $`Error Global`
## [1] 0.0754717
##
## $`Precisión por categoría`
## 0 1
## 0 1
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0
##
## $`Falsos Positivos`
## [1] 1
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9245283
##
## $`Asertividad Negativa`
## [1] NaN
library(traineR)
modelo <- train.svm(tipo ~ .,data = taprendizaje, kernel = "linear")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real 0 1
## 0 22 2
## 1 11 283
##
## $`Precisión Global`
## [1] 0.9591195
##
## $`Error Global`
## [1] 0.0408805
##
## $`Precisión por categoría`
## 0 1
## 0.9166667 0.9625850
##
## $`Precision Positiva`
## [1] 0.962585
##
## $`Precision Negativa`
## [1] 0.9166667
##
## $`Falsos Positivos`
## [1] 0.08333333
##
## $`Falsos Negativos`
## [1] 0.03741497
##
## $`Asertividad Positiva`
## [1] 0.9929825
##
## $`Asertividad Negativa`
## [1] 0.6666667
library(traineR)
modelo <- train.svm(tipo ~ .,data = taprendizaje, kernel = "sigmoid")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real 0 1
## 0 0 24
## 1 0 294
##
## $`Precisión Global`
## [1] 0.9245283
##
## $`Error Global`
## [1] 0.0754717
##
## $`Precisión por categoría`
## 0 1
## 0 1
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0
##
## $`Falsos Positivos`
## [1] 1
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9245283
##
## $`Asertividad Negativa`
## [1] NaN
library(traineR)
modelo <- train.svm(tipo ~ .,data = taprendizaje, kernel = "polynomial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real 0 1
## 0 0 24
## 1 0 294
##
## $`Precisión Global`
## [1] 0.9245283
##
## $`Error Global`
## [1] 0.0754717
##
## $`Precisión por categoría`
## 0 1
## 0 1
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0
##
## $`Falsos Positivos`
## [1] 1
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9245283
##
## $`Asertividad Negativa`
## [1] NaN
modelo <- train.svm(tipo ~ .,data = taprendizaje)
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real 0 1
## 0 0 24
## 1 0 294
##
## $`Precisión Global`
## [1] 0.9245283
##
## $`Error Global`
## [1] 0.0754717
##
## $`Precisión por categoría`
## 0 1
## 0 1
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0
##
## $`Falsos Positivos`
## [1] 1
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9245283
##
## $`Asertividad Negativa`
## [1] NaN
Ninguno de los kernels esta logrando estimar correctamente los casos de no tumor.Todos los kernels dan la misma matrix de confusion, excepto el linear que permite identificar ambos casos y tiene la precision global mas alta con 0.9716981, pero una asertividad negativa aun baja de 0.7777778.
x <- data.frame("Modelo" = c("Modelo k-vecinos", "Modelo kvecinos.traineR", "Modelo Red 2 nodos", "Modelo Arbol Decision", "SVM radial", "SVM Linear", "SVM Sigmoid", "SVM polynomial"), "Precision Global" = c(0.9559748, 0.9402516, 0.9497, 0.9717, 0.9245283, 0.9748428, 0.9245283, 0.9245283), "Error Global" = c(0.04402516, 0.05974843, 0.0503, 0.0283, 0.0754717, 0.02515723, 0.0754717,0.0754717))
x
## Modelo Precision.Global Error.Global
## 1 Modelo k-vecinos 0.9559748 0.04402516
## 2 Modelo kvecinos.traineR 0.9402516 0.05974843
## 3 Modelo Red 2 nodos 0.9497000 0.05030000
## 4 Modelo Arbol Decision 0.9717000 0.02830000
## 5 SVM radial 0.9245283 0.07547170
## 6 SVM Linear 0.9748428 0.02515723
## 7 SVM Sigmoid 0.9245283 0.07547170
## 8 SVM polynomial 0.9245283 0.07547170
Ninguno de los kernels esta logrando estimar correctamente los casos de no tumor.Todos los kernels dan la misma matrix de confusion, excepto el linear que permite identificar ambos casos y tiene la precision global mas alta con 0.9716981, pero una asertividad negativa aun baja de 0.7777778.Comparando de forma sencillo los modelos mas acertados en las tareas anteriores, ya que se han dado varios intentos con resultados de toda clase. El SVM linear parece ser en este ejercicio el que mejor esta asimilando los datos para explicar la variabilidad del caso. Tiene una precision global bastante alta. De hecho, todos los casos probables de no tumor los identifica. Aun asi debe indicarse que se trata con tumores, lo implica que se necesita replantear el modelo, dado que se trata de tumores, lo que es mas importante, es probable que se requier un tamano de muestra mas grande para arrojar datos veridicos ya que en este caso los modelos no estan leyendo completamente bien los casos. En el caso de todos los modelos la precision por categoria ha sido especialmente debil al no detectar los no tumores, esto se explica probablemente por la falta de muestra en estos casos.
Pregunta 3: [25 puntos] En este ejercicio vamos a predecir n´umeros escritos a mano (Hand Written Digit Recognition), la tabla de de datos est´a en el archivo ZipData 2020.csv. En la figura siguiente se ilustran los datos
Para esto realice lo siguiente (podr´ıa tomar varios minutos los calculos):
setwd("C:/Users/rzamoram/Documents/Machine Learning/Mineria de Datos I/Clase3")
data2<-read.csv("ZipData_2020.csv",sep=";",dec='.',header=T)
head(data2)
## Numero V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
## 1 seis -1 -1 -1 -1.000 -1.000 -1.000 -1.000 -0.631 0.862 -0.167 -1.000
## 2 cinco -1 -1 -1 -0.813 -0.671 -0.809 -0.887 -0.671 -0.853 -1.000 -1.000
## 3 cuatro -1 -1 -1 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.996 0.147
## 4 siete -1 -1 -1 -1.000 -1.000 -0.273 0.684 0.960 0.450 -0.067 -0.679
## 5 tres -1 -1 -1 -1.000 -1.000 -0.928 -0.204 0.751 0.466 0.234 -0.809
## 6 seis -1 -1 -1 -1.000 -1.000 -0.397 0.983 -0.535 -1.000 -1.000 -1.000
## V13 V14 V15 V16 V17 V18 V19 V20 V21 V22 V23 V24
## 1 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1 -1.000 -1.000 -1.000 -0.992
## 2 -0.774 -0.180 0.052 -0.241 -1 -1 -1 -1 0.392 1.000 0.857 0.727
## 3 1.000 -0.189 -1.000 -1.000 -1 -1 -1 -1 -1.000 -1.000 -1.000 -1.000
## 4 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1 -1.000 -0.114 0.974 0.917
## 5 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1 -1.000 -0.370 0.739 1.000
## 6 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1 -1.000 -1.000 0.692 0.536
## V25 V26 V27 V28 V29 V30 V31 V32 V33 V34 V35 V36
## 1 0.297 1.000 0.307 -1.000 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1
## 2 1.000 0.805 0.613 0.613 0.860 1.000 1.000 0.396 -1 -1 -1 -1
## 3 -1.000 -1.000 -0.882 1.000 0.390 -0.811 -1.000 -1.000 -1 -1 -1 -1
## 4 0.734 0.994 1.000 0.973 0.391 -0.421 -0.976 -1.000 -1 -1 -1 -1
## 5 1.000 1.000 1.000 0.644 -0.890 -1.000 -1.000 -1.000 -1 -1 -1 -1
## 6 -0.767 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1
## V37 V38 V39 V40 V41 V42 V43 V44 V45 V46 V47
## 1 -1.000 -1.000 -1.000 -0.410 1.000 0.986 -0.565 -1.000 -1.000 -1 -1.000
## 2 -0.548 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1 1.000
## 3 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.715 1.000 0.029 -1 -1.000
## 4 -0.323 0.991 0.622 -0.738 -1.000 -0.639 0.023 0.871 1.000 1 -0.432
## 5 -1.000 0.616 1.000 0.688 -0.455 -0.731 0.659 1.000 -0.287 -1 -1.000
## 6 -1.000 -0.921 0.928 -0.118 -1.000 -1.000 -1.000 -1.000 -1.000 -1 -1.000
## V48 V49 V50 V51 V52 V53 V54 V55 V56 V57 V58 V59
## 1 -1.000 -1.000 -1 -1 -1 -1.000 -1.000 -0.683 0.825 1 0.562 -1.000
## 2 0.875 -0.957 -1 -1 -1 -0.786 0.961 1.000 1.000 1 0.727 0.403
## 3 -1.000 -1.000 -1 -1 -1 -1.000 -0.888 -0.912 -1.000 -1 -1.000 -0.549
## 4 -1.000 -1.000 -1 -1 -1 0.409 1.000 0.000 -1.000 -1 -1.000 -1.000
## 5 -1.000 -1.000 -1 -1 -1 -1.000 -0.376 -0.186 -0.874 -1 -1.000 -0.014
## 6 -1.000 -1.000 -1 -1 -1 -1.000 -0.394 1.000 -0.596 -1 -1.000 -1.000
## V60 V61 V62 V63 V64 V65 V66 V67 V68 V69 V70 V71
## 1 -1.000 -1.000 -1.000 -1.000 -1.00 -1 -1 -1 -1.000 -1.000 -0.938 0.540
## 2 0.403 0.171 -0.314 -0.314 -0.94 -1 -1 -1 -1.000 -0.298 1.000 1.000
## 3 1.000 0.361 -1.000 -1.000 -1.00 -1 -1 -1 -1.000 -0.938 0.694 0.057
## 4 -0.842 0.714 1.000 -0.534 -1.00 -1 -1 -1 -0.879 0.965 1.000 -0.713
## 5 1.000 -0.253 -1.000 -1.000 -1.00 -1 -1 -1 -1.000 -1.000 -1.000 -1.000
## 6 -1.000 -1.000 -1.000 -1.000 -1.00 -1 -1 -1 -1.000 -1.000 0.060 0.900
## V72 V73 V74 V75 V76 V77 V78 V79 V80 V81 V82 V83
## 1 1.000 0.778 -0.715 -1.000 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1
## 2 1.000 0.440 0.056 -0.755 -1.000 -1.000 -1.000 -1.000 -1 -1 -1 -1
## 3 -1.000 -1.000 -1.000 -0.382 1.000 0.511 -1.000 -1.000 -1 -1 -1 -1
## 4 -1.000 -1.000 -1.000 -1.000 -0.606 0.977 0.695 -0.906 -1 -1 -1 -1
## 5 -1.000 -1.000 -0.978 0.501 1.000 -0.540 -1.000 -1.000 -1 -1 -1 -1
## 6 -0.951 -1.000 -1.000 -1.000 -0.647 0.455 -0.333 -1.000 -1 -1 -1 -1
## V84 V85 V86 V87 V88 V89 V90 V91 V92 V93 V94
## 1 -1.000 -1.000 0.100 1.000 0.922 -0.439 -1.000 -1.000 -1.000 -1.000 -1.000
## 2 -1.000 0.366 1.000 1.000 1.000 1.000 1.000 0.889 -0.081 -0.920 -1.000
## 3 -1.000 -0.311 1.000 -0.043 -1.000 -1.000 -1.000 -0.648 1.000 0.644 -1.000
## 4 -0.528 1.000 0.931 -0.888 -1.000 -1.000 -1.000 -0.949 0.559 0.984 -0.363
## 5 -1.000 -1.000 -1.000 -0.998 -0.341 0.296 0.371 1.000 0.417 -0.989 -1.000
## 6 -1.000 -1.000 0.259 0.676 -1.000 -1.000 -1.000 -0.984 0.677 0.981 0.551
## V95 V96 V97 V98 V99 V100 V101 V102 V103 V104 V105 V106 V107
## 1 -1 -1 -1 -1 -1 -1.00 -0.257 0.950 1.000 -0.162 -1.000 -1.00 -1.000
## 2 -1 -1 -1 -1 -1 -1.00 -0.396 0.886 0.974 0.851 0.851 0.95 1.000
## 3 -1 -1 -1 -1 -1 -1.00 0.489 1.000 -0.493 -1.000 -1.000 -1.00 -0.564
## 4 -1 -1 -1 -1 -1 -0.97 -0.266 -0.555 -1.000 -1.000 -1.000 -1.00 -0.186
## 5 -1 -1 -1 -1 -1 -1.00 -1.000 -1.000 -0.008 1.000 1.000 1.00 1.000
## 6 -1 -1 -1 -1 -1 -1.00 -0.994 0.699 0.305 -1.000 -1.000 -1.00 -0.499
## V108 V109 V110 V111 V112 V113 V114 V115 V116 V117 V118 V119
## 1 -0.987 -0.714 -0.832 -1 -1 -1 -1 -1 -0.797 0.909 1.000 0.300
## 2 1.000 0.539 -0.754 -1 -1 -1 -1 -1 -1.000 -1.000 -0.886 -0.505
## 3 1.000 0.693 -1.000 -1 -1 -1 -1 -1 -0.966 0.988 1.000 -0.893
## 4 1.000 0.488 -1.000 -1 -1 -1 -1 -1 -1.000 -1.000 -1.000 -1.000
## 5 0.761 -0.731 -1.000 -1 -1 -1 -1 -1 -1.000 -1.000 -1.000 0.242
## 6 1.000 -0.092 0.751 -1 -1 -1 -1 -1 -1.000 -0.923 0.966 -0.107
## V120 V121 V122 V123 V124 V125 V126 V127 V128 V129 V130 V131
## 1 -0.961 -1 -1.000 -0.550 0.485 0.996 0.867 0.092 -1 -1 -1 -1
## 2 -1.000 -1 -0.649 0.405 1.000 1.000 0.653 -0.838 -1 -1 -1 -1
## 3 -1.000 -1 -1.000 -0.397 1.000 0.903 -0.977 -1.000 -1 -1 -1 -1
## 4 -1.000 -1 -1.000 0.697 0.992 -0.458 -1.000 -1.000 -1 -1 -1 -1
## 5 1.000 1 0.319 0.259 1.000 0.742 -0.757 -1.000 -1 -1 -1 -1
## 6 -1.000 -1 -1.000 -0.300 0.854 -0.382 0.617 -1.000 -1 -1 -1 -1
## V132 V133 V134 V135 V136 V137 V138 V139 V140 V141 V142
## 1 0.278 1.000 0.877 -0.824 -1.000 -0.905 0.145 0.977 1.000 1.000 1.000
## 2 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.550 0.993 1.000
## 3 -0.559 1.000 1.000 -0.297 -1.000 -1.000 -1.000 -0.611 1.000 0.873 -0.698
## 4 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.341 1.000 0.608 -1.000 -1.000
## 5 -1.000 -1.000 -1.000 -0.975 -0.467 -0.989 -1.000 -1.000 -0.171 0.998 0.669
## 6 -1.000 -0.409 1.000 -0.529 -1.000 -1.000 -1.000 0.048 0.614 -0.268 0.544
## V143 V144 V145 V146 V147 V148 V149 V150 V151 V152 V153
## 1 0.990 -0.745 -1 -1.00 -0.950 0.847 1.000 0.327 -1.000 -1.000 0.355
## 2 0.618 -0.869 -1 -0.96 -0.512 0.134 -0.343 -0.796 -1.000 -1.000 -1.000
## 3 -0.552 -1.000 -1 -1.00 -1.000 -0.126 1.000 1.000 0.766 -0.764 -1.000
## 4 -1.000 -1.000 -1 -1.00 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
## 5 -0.945 -1.000 -1 -1.00 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
## 6 -1.000 -1.000 -1 -1.00 -1.000 -1.000 0.050 0.971 -0.839 -1.000 -1.000
## V154 V155 V156 V157 V158 V159 V160 V161 V162 V163 V164
## 1 1.000 0.655 -0.109 -0.185 1.000 0.988 -0.723 -1 -1.000 -0.63 1.000
## 2 -1.000 -1.000 -1.000 -0.432 0.994 1.000 0.223 -1 0.426 1.00 1.000
## 3 -1.000 -0.577 1.000 0.933 0.484 -0.197 -1.000 -1 -1.000 -1.00 -0.818
## 4 0.471 0.998 -0.416 -1.000 -1.000 -1.000 -1.000 -1 -1.000 -1.00 -1.000
## 5 -1.000 -1.000 -1.000 0.228 1.000 0.038 -1.000 -1 -1.000 -1.00 -1.000
## 6 -1.000 0.172 0.526 -0.003 0.307 -1.000 -1.000 -1 -1.000 -1.00 -1.000
## V165 V166 V167 V168 V169 V170 V171 V172 V173 V174 V175
## 1 1.000 0.068 -0.925 0.113 0.960 0.308 -0.884 -1.000 -0.075 1.000 0.641
## 2 1.000 0.214 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.292 1.000
## 3 -0.355 0.334 1.000 0.868 -0.289 -0.677 -0.596 1.000 1.000 1.000 -0.581
## 4 -1.000 -1.000 -1.000 -1.000 -0.644 0.963 0.590 -0.999 -1.000 -1.000 -1.000
## 5 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.826 0.918 0.933
## 6 0.398 0.459 -1.000 -1.000 -1.000 -1.000 0.372 0.555 0.520 -0.045 -1.000
## V176 V177 V178 V179 V180 V181 V182 V183 V184 V185 V186
## 1 -0.995 -1.00 -1.000 -0.677 1.000 1.000 0.753 0.341 1 0.707 -0.942
## 2 0.967 -0.88 0.449 1.000 0.896 -0.094 -0.750 -1.000 -1 -1.000 -1.000
## 3 -1.000 -1.00 -1.000 -1.000 -1.000 -1.000 -0.954 0.118 1 1.000 1.000
## 4 -1.000 -1.00 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1 0.061 1.000
## 5 -0.794 -1.00 -1.000 -1.000 -0.666 0.337 0.224 -0.908 -1 -1.000 -1.000
## 6 -1.000 -1.00 -1.000 -1.000 -1.000 0.671 0.176 -1.000 -1 -1.000 -1.000
## V187 V188 V189 V190 V191 V192 V193 V194 V195 V196 V197
## 1 -1.000 -1.000 0.545 1.000 0.027 -1.000 -1.000 -1.000 -0.903 0.792 1.000
## 2 -1.000 -1.000 -1.000 -0.627 1.000 1.000 0.198 -0.105 1.000 1.000 1.000
## 3 1.000 1.000 0.973 -0.092 -0.995 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
## 4 -0.079 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000
## 5 -1.000 -1.000 -1.000 0.418 1.000 -0.258 -1.000 -1.000 -0.246 1.000 1.000
## 6 0.236 0.934 0.971 -0.712 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 0.763
## V198 V199 V200 V201 V202 V203 V204 V205 V206 V207 V208
## 1 1.000 1.000 1.000 0.536 0.184 0.812 0.837 0.978 0.864 -0.630 -1.000
## 2 0.639 -0.168 -0.314 -0.446 -1.000 -1.000 -0.999 -0.337 0.147 0.996 1.000
## 3 -1.000 -0.993 -0.464 0.046 0.290 0.457 1.000 0.721 -1.000 -1.000 -1.000
## 4 -1.000 -1.000 -1.000 0.773 0.958 -0.714 -1.000 -1.000 -1.000 -1.000 -1.000
## 5 0.355 -0.958 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.077 1.000 0.344
## 6 0.084 -1.000 -1.000 -1.000 -1.000 0.073 1.000 0.265 -1.000 -1.000 -1.000
## V209 V210 V211 V212 V213 V214 V215 V216 V217 V218 V219
## 1 -1.000 -1.000 -1.000 -0.452 0.828 1.000 1.000 1.000 1.000 1.000 1.000
## 2 0.667 -0.808 0.065 0.993 1.000 1.000 1.000 1.000 0.996 0.970 0.970
## 3 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.426
## 4 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.545 0.989 0.432 -1.000
## 5 -1.000 -1.000 0.075 1.000 1.000 0.649 0.256 -0.200 -0.351 -0.733 -0.733
## 6 -1.000 -1.000 -1.000 -1.000 0.563 0.210 -1.000 -1.000 -0.930 -0.127 0.890
## V220 V221 V222 V223 V224 V225 V226 V227 V228 V229 V230
## 1 1.000 1.000 0.135 -1 -1.000 -1.000 -1 -1.000 -1.000 -0.483 0.813
## 2 0.970 0.998 1.000 1 1.000 0.109 -1 -1.000 -0.830 -0.242 0.350
## 3 1.000 0.555 -1.000 -1 -1.000 -1.000 -1 -1.000 -1.000 -1.000 -1.000
## 4 -1.000 -1.000 -1.000 -1 -1.000 -1.000 -1 -1.000 -1.000 -1.000 -1.000
## 5 -0.733 -0.433 0.649 1 0.093 -1.000 -1 -0.959 -0.062 0.821 1.000
## 6 0.935 -0.845 -1.000 -1 -1.000 -1.000 -1 -1.000 -1.000 0.093 0.793
## V231 V232 V233 V234 V235 V236 V237 V238 V239 V240 V241
## 1 1.000 1.000 1.000 1.000 1.000 1.000 0.219 -0.943 -1.000 -1.000 -1.00
## 2 0.800 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 0.616 -0.93
## 3 -1.000 -1.000 -1.000 -1.000 0.024 1.000 0.388 -1.000 -1.000 -1.000 -1.00
## 4 -1.000 -0.348 1.000 0.798 -0.935 -1.000 -1.000 -1.000 -1.000 -1.000 -1.00
## 5 1.000 1.000 1.000 1.000 1.000 1.000 1.000 1.000 0.583 -0.843 -1.00
## 6 -0.205 0.214 0.746 0.918 0.692 0.954 -0.882 -1.000 -1.000 -1.000 -1.00
## V242 V243 V244 V245 V246 V247 V248 V249 V250 V251 V252 V253
## 1 -1 -1 -1 -1.000 -0.974 -0.429 0.304 0.823 1.000 0.482 -0.474 -0.991
## 2 -1 -1 -1 -1.000 -1.000 -0.858 -0.671 -0.671 -0.033 0.761 0.762 0.126
## 3 -1 -1 -1 -1.000 -1.000 -1.000 -1.000 -1.000 -1.000 -0.109 1.000 -0.179
## 4 -1 -1 -1 -1.000 -1.000 -1.000 -0.318 1.000 0.536 -0.987 -1.000 -1.000
## 5 -1 -1 -1 -0.877 -0.326 0.174 0.466 0.639 1.000 1.000 0.791 0.439
## 6 -1 -1 -1 -0.898 0.323 1.000 0.803 0.015 -0.862 -0.871 -0.437 -1.000
## V254 V255 V256 V257
## 1 -1.000 -1.000 -1.000 -1
## 2 -0.095 -0.671 -0.828 -1
## 3 -1.000 -1.000 -1.000 -1
## 4 -1.000 -1.000 -1.000 -1
## 5 -0.199 -0.883 -1.000 -1
## 6 -1.000 -1.000 -1.000 -1
str(data2)
## 'data.frame': 9298 obs. of 257 variables:
## $ Numero: Factor w/ 10 levels "cero","cinco",..: 7 2 3 8 9 7 9 10 1 10 ...
## $ V2 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V3 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V4 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V5 : num -1 -0.813 -1 -1 -1 -1 -0.83 -1 -1 -1 ...
## $ V6 : num -1 -0.671 -1 -1 -1 -1 0.442 -1 -1 -1 ...
## $ V7 : num -1 -0.809 -1 -0.273 -0.928 -0.397 1 -1 -0.454 -1 ...
## $ V8 : num -1 -0.887 -1 0.684 -0.204 0.983 1 -1 0.879 -1 ...
## $ V9 : num -0.631 -0.671 -1 0.96 0.751 -0.535 0.479 0.51 -0.745 -0.909 ...
## $ V10 : num 0.862 -0.853 -1 0.45 0.466 -1 -0.328 -0.213 -1 0.801 ...
## $ V11 : num -0.167 -1 -0.996 -0.067 0.234 -1 -0.947 -1 -1 -0.899 ...
## $ V12 : num -1 -1 0.147 -0.679 -0.809 -1 -1 -1 -1 -1 ...
## $ V13 : num -1 -0.774 1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V14 : num -1 -0.18 -0.189 -1 -1 -1 -1 -1 -1 -1 ...
## $ V15 : num -1 0.052 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V16 : num -1 -0.241 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V17 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V18 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V19 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V20 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V21 : num -1 0.392 -1 -1 -1 -1 -0.025 -1 -1 -1 ...
## $ V22 : num -1 1 -1 -0.114 -0.37 -1 0.519 -1 -0.716 -1 ...
## $ V23 : num -1 0.857 -1 0.974 0.739 0.692 0.124 -1 0.804 -1 ...
## $ V24 : num -0.992 0.727 -1 0.917 1 0.536 0.339 -1 1 -1 ...
## $ V25 : num 0.297 1 -1 0.734 1 -0.767 0.762 0.292 0.42 -0.405 ...
## $ V26 : num 1 0.805 -1 0.994 1 -1 1 0.792 -0.664 1 ...
## $ V27 : num 0.307 0.613 -0.882 1 1 -1 0.456 -0.987 -1 -0.396 ...
## $ V28 : num -1 0.613 1 0.973 0.644 -1 -0.707 -1 -1 -1 ...
## $ V29 : num -1 0.86 0.39 0.391 -0.89 -1 -1 -1 -1 -1 ...
## $ V30 : num -1 1 -0.811 -0.421 -1 -1 -1 -1 -1 -1 ...
## $ V31 : num -1 1 -1 -0.976 -1 -1 -1 -1 -1 -1 ...
## $ V32 : num -1 0.396 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V33 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V34 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V35 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V36 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V37 : num -1 -0.548 -1 -0.323 -1 -1 -1 -1 -0.978 -1 ...
## $ V38 : num -1 1 -1 0.991 0.616 -0.921 -1 -1 0.713 -1 ...
## $ V39 : num -1 1 -1 0.622 1 0.928 -1 -1 1 -1 ...
## $ V40 : num -0.41 1 -1 -0.738 0.688 -0.118 -1 -1 0.027 -1 ...
## $ V41 : num 1 1 -1 -1 -0.455 -1 -0.965 0.56 0.408 -0.072 ...
## $ V42 : num 0.986 1 -1 -0.639 -0.731 -1 -0.086 0.975 0.947 1 ...
## $ V43 : num -0.565 1 -0.715 0.023 0.659 -1 0.843 -0.873 0.56 -0.468 ...
## $ V44 : num -1 1 1 0.871 1 -1 0.681 -1 -0.538 -1 ...
## $ V45 : num -1 1 0.029 1 -0.287 -1 -0.955 -1 -1 -1 ...
## $ V46 : num -1 1 -1 1 -1 -1 -1 -1 -1 -1 ...
## $ V47 : num -1 1 -1 -0.432 -1 -1 -1 -1 -1 -1 ...
## $ V48 : num -1 0.875 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V49 : num -1 -0.957 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V50 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V51 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V52 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V53 : num -1 -0.786 -1 0.409 -1 -1 -1 -1 -0.118 -1 ...
## $ V54 : num -1 0.961 -0.888 1 -0.376 -0.394 -1 -1 1 -1 ...
## $ V55 : num -0.683 1 -0.912 0 -0.186 1 -1 -1 0.665 -1 ...
## $ V56 : num 0.825 1 -1 -1 -0.874 -0.596 -1 -1 -0.902 -1 ...
## $ V57 : num 1 1 -1 -1 -1 -1 -1 0.745 -0.969 0.057 ...
## $ V58 : num 0.562 0.727 -1 -1 -1 -1 -1 0.999 -0.36 1 ...
## $ V59 : num -1 0.403 -0.549 -1 -0.014 -1 -0.467 -0.748 0.805 -0.623 ...
## $ V60 : num -1 0.403 1 -0.842 1 -1 1 -1 0.987 -1 ...
## $ V61 : num -1 0.171 0.361 0.714 -0.253 -1 -0.279 -1 0.327 -1 ...
## $ V62 : num -1 -0.314 -1 1 -1 -1 -1 -1 -0.797 -1 ...
## $ V63 : num -1 -0.314 -1 -0.534 -1 -1 -1 -1 -1 -1 ...
## $ V64 : num -1 -0.94 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V65 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V66 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V67 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V68 : num -1 -1 -1 -0.879 -1 -1 -1 -1 -0.935 -1 ...
## $ V69 : num -1 -0.298 -0.938 0.965 -1 -1 -1 -1 0.764 -1 ...
## $ V70 : num -0.938 1 0.694 1 -1 0.06 -1 -1 1 -1 ...
## $ V71 : num 0.54 1 0.057 -0.713 -1 0.9 -1 -1 -0.367 -1 ...
## $ V72 : num 1 1 -1 -1 -1 -0.951 -1 -1 -1 -1 ...
## $ V73 : num 0.778 0.44 -1 -1 -1 -1 -1 0.596 -1 0.288 ...
## $ V74 : num -0.715 0.056 -1 -1 -0.978 -1 -1 1 -1 1 ...
## $ V75 : num -1 -0.755 -0.382 -1 0.501 -1 -0.719 -0.601 -0.914 -0.683 ...
## $ V76 : num -1 -1 1 -0.606 1 -0.647 1 -1 -0.256 -1 ...
## $ V77 : num -1 -1 0.511 0.977 -0.54 0.455 -0.203 -1 0.833 -1 ...
## $ V78 : num -1 -1 -1 0.695 -1 -0.333 -1 -1 0.778 -1 ...
## $ V79 : num -1 -1 -1 -0.906 -1 -1 -1 -1 -0.22 -1 ...
## $ V80 : num -1 -1 -1 -1 -1 -1 -1 -1 -0.992 -1 ...
## $ V81 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V82 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V83 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V84 : num -1 -1 -1 -0.528 -1 -1 -1 -1 -0.256 -1 ...
## $ V85 : num -1 0.366 -0.311 1 -1 -1 -1 -1 1 -1 ...
## $ V86 : num 0.1 1 1 0.931 -1 0.259 -1 -1 0.538 -1 ...
## $ V87 : num 1 1 -0.043 -0.888 -0.998 0.676 -1 -1 -0.986 -1 ...
## $ V88 : num 0.922 1 -1 -1 -0.341 -1 -1 -1 -1 -1 ...
## $ V89 : num -0.439 1 -1 -1 0.296 -1 -1 0.714 -1 0.253 ...
## $ V90 : num -1 1 -1 -1 0.371 -1 -0.786 1 -1 1 ...
## $ V91 : num -1 0.889 -0.648 -0.949 1 -0.984 0.504 -0.585 -1 -0.647 ...
## $ V92 : num -1 -0.081 1 0.559 0.417 0.677 0.945 -1 -1 -1 ...
## $ V93 : num -1 -0.92 0.644 0.984 -0.989 0.981 -0.801 -1 -0.837 -1 ...
## $ V94 : num -1 -1 -1 -0.363 -1 0.551 -1 -1 0.551 -1 ...
## $ V95 : num -1 -1 -1 -1 -1 -1 -1 -1 1 -1 ...
## $ V96 : num -1 -1 -1 -1 -1 -1 -1 -1 -0.285 -1 ...
## $ V97 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V98 : num -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ V99 : num -1 -1 -1 -1 -1 -1 -1 -1 -0.936 -1 ...
## [list output truncated]
equilibrio.variable.predecir(data2,"Numero")
Es un problema desequilibrado.
library(traineR)
muestra <- sample(1:nrow(data2),floor(nrow(data2)*0.20))
ttesting <- data2[muestra,]
taprendizaje <- data2[-muestra,]
modelo <- train.svm(Numero ~ .,data = taprendizaje, kernel = "radial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 308 0 0 2 0 0 0 0 1 0
## cinco 1 144 1 1 0 1 0 0 1 0
## cuatro 0 0 160 2 0 2 2 0 0 1
## dos 0 0 1 170 0 1 0 0 0 0
## nueve 0 1 1 1 147 0 0 2 0 0
## ocho 1 5 0 1 1 139 1 0 0 1
## seis 0 0 0 2 0 0 158 0 0 0
## siete 0 0 4 1 1 3 0 161 0 0
## tres 0 3 1 4 0 5 0 0 177 1
## uno 0 0 1 1 0 0 1 0 0 235
##
## $`Precisión Global`
## [1] 0.9677246
##
## $`Error Global`
## [1] 0.03227542
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9903537 0.9664430 0.9580838 0.9883721 0.9671053 0.9328859 0.9875000 0.9470588
## tres uno
## 0.9267016 0.9873950
##
## $`Precision Positiva`
## [1] 0.9931034
##
## $`Precision Negativa`
## [1] 1
##
## $`Falsos Positivos`
## [1] 0
##
## $`Falsos Negativos`
## [1] 0.006896552
##
## $`Asertividad Positiva`
## [1] 1
##
## $`Asertividad Negativa`
## [1] 0.9967638
library(traineR)
modelo <- train.svm(Numero ~ .,data = taprendizaje, kernel = "polynomial")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 306 1 0 2 0 2 0 0 0 0
## cinco 0 144 1 1 0 1 1 0 1 0
## cuatro 0 0 162 1 1 1 1 0 0 1
## dos 0 0 1 166 0 4 0 0 1 0
## nueve 0 0 1 0 149 1 0 1 0 0
## ocho 0 2 0 0 0 146 0 0 1 0
## seis 0 0 0 2 0 1 157 0 0 0
## siete 0 0 5 0 4 3 0 158 0 0
## tres 0 3 1 2 0 4 0 0 181 0
## uno 0 1 2 0 0 0 1 0 0 234
##
## $`Precisión Global`
## [1] 0.9698763
##
## $`Error Global`
## [1] 0.03012372
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9839228 0.9664430 0.9700599 0.9651163 0.9802632 0.9798658 0.9812500 0.9294118
## tres uno
## 0.9476440 0.9831933
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0.9967427
##
## $`Falsos Positivos`
## [1] 0.003257329
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9931034
##
## $`Asertividad Negativa`
## [1] 1
library(traineR)
modelo <- train.svm(Numero ~ .,data = taprendizaje, kernel = "sigmoid")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 288 12 3 3 0 1 2 0 2 0
## cinco 9 118 3 0 1 4 0 1 13 0
## cuatro 4 1 152 1 1 4 3 0 0 1
## dos 10 0 4 146 0 3 8 1 0 0
## nueve 1 2 2 0 141 0 0 6 0 0
## ocho 4 4 2 0 1 132 1 1 3 1
## seis 1 0 0 1 0 0 158 0 0 0
## siete 1 0 4 1 4 3 0 157 0 0
## tres 2 5 1 2 0 5 0 2 172 2
## uno 0 0 1 0 0 0 1 0 0 236
##
## $`Precisión Global`
## [1] 0.9144701
##
## $`Error Global`
## [1] 0.08552985
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9260450 0.7919463 0.9101796 0.8488372 0.9276316 0.8859060 0.9875000 0.9235294
## tres uno
## 0.9005236 0.9915966
##
## $`Precision Positiva`
## [1] 0.9291339
##
## $`Precision Negativa`
## [1] 0.96
##
## $`Falsos Positivos`
## [1] 0.04
##
## $`Falsos Negativos`
## [1] 0.07086614
##
## $`Asertividad Positiva`
## [1] 0.9076923
##
## $`Asertividad Negativa`
## [1] 0.969697
library(traineR)
modelo <- train.svm(Numero ~ .,data = taprendizaje, kernel = "linear")
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 307 1 0 1 0 0 1 0 1 0
## cinco 2 134 3 0 0 1 4 1 4 0
## cuatro 0 0 160 1 0 0 3 1 0 2
## dos 0 0 3 161 1 1 3 0 3 0
## nueve 0 0 3 0 143 0 0 6 0 0
## ocho 2 2 1 1 1 136 0 0 4 2
## seis 0 1 0 1 0 0 158 0 0 0
## siete 1 1 4 0 3 1 0 159 1 0
## tres 0 5 1 3 1 4 0 0 177 0
## uno 0 0 1 0 0 0 1 0 0 236
##
## $`Precisión Global`
## [1] 0.9526627
##
## $`Error Global`
## [1] 0.04733728
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9871383 0.8993289 0.9580838 0.9360465 0.9407895 0.9127517 0.9875000 0.9352941
## tres uno
## 0.9267016 0.9915966
##
## $`Precision Positiva`
## [1] 0.9852941
##
## $`Precision Negativa`
## [1] 0.9967532
##
## $`Falsos Positivos`
## [1] 0.003246753
##
## $`Falsos Negativos`
## [1] 0.01470588
##
## $`Asertividad Positiva`
## [1] 0.9925926
##
## $`Asertividad Negativa`
## [1] 0.9935275
modelo <- train.svm(Numero ~ .,data = taprendizaje)
prediccion <- predict(modelo, ttesting , type = "class")
MC <- confusion.matrix(ttesting, prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediction
## real cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 308 0 0 2 0 0 0 0 1 0
## cinco 1 144 1 1 0 1 0 0 1 0
## cuatro 0 0 160 2 0 2 2 0 0 1
## dos 0 0 1 170 0 1 0 0 0 0
## nueve 0 1 1 1 147 0 0 2 0 0
## ocho 1 5 0 1 1 139 1 0 0 1
## seis 0 0 0 2 0 0 158 0 0 0
## siete 0 0 4 1 1 3 0 161 0 0
## tres 0 3 1 4 0 5 0 0 177 1
## uno 0 0 1 1 0 0 1 0 0 235
##
## $`Precisión Global`
## [1] 0.9677246
##
## $`Error Global`
## [1] 0.03227542
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9903537 0.9664430 0.9580838 0.9883721 0.9671053 0.9328859 0.9875000 0.9470588
## tres uno
## 0.9267016 0.9873950
##
## $`Precision Positiva`
## [1] 0.9931034
##
## $`Precision Negativa`
## [1] 1
##
## $`Falsos Positivos`
## [1] 0
##
## $`Falsos Negativos`
## [1] 0.006896552
##
## $`Asertividad Positiva`
## [1] 1
##
## $`Asertividad Negativa`
## [1] 0.9967638
library(class)
library(e1071)
modelo <- svm(Numero~., data = taprendizaje)
modelo
##
## Call:
## svm(formula = Numero ~ ., data = taprendizaje)
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: radial
## cost: 1
##
## Number of Support Vectors: 2732
prediccion <- predict(modelo,ttesting)
MC<-table(ttesting[,1],prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediccion
## cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 308 0 0 2 0 0 0 0 1 0
## cinco 1 144 1 1 0 1 0 0 1 0
## cuatro 0 0 160 2 0 2 2 0 0 1
## dos 0 0 1 170 0 1 0 0 0 0
## nueve 0 1 1 1 147 0 0 2 0 0
## ocho 1 5 0 1 1 139 1 0 0 1
## seis 0 0 0 2 0 0 158 0 0 0
## siete 0 0 4 1 1 3 0 161 0 0
## tres 0 3 1 4 0 5 0 0 177 1
## uno 0 0 1 1 0 0 1 0 0 235
##
## $`Precisión Global`
## [1] 0.9677246
##
## $`Error Global`
## [1] 0.03227542
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9903537 0.9664430 0.9580838 0.9883721 0.9671053 0.9328859 0.9875000 0.9470588
## tres uno
## 0.9267016 0.9873950
##
## $`Precision Positiva`
## [1] 0.9931034
##
## $`Precision Negativa`
## [1] 1
##
## $`Falsos Positivos`
## [1] 0
##
## $`Falsos Negativos`
## [1] 0.006896552
##
## $`Asertividad Positiva`
## [1] 1
##
## $`Asertividad Negativa`
## [1] 0.9967638
modelo <- svm(Numero~., data = taprendizaje, kernel="radial")
prediccion <- predict(modelo,ttesting)
MC<-table(ttesting[,1],prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediccion
## cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 308 0 0 2 0 0 0 0 1 0
## cinco 1 144 1 1 0 1 0 0 1 0
## cuatro 0 0 160 2 0 2 2 0 0 1
## dos 0 0 1 170 0 1 0 0 0 0
## nueve 0 1 1 1 147 0 0 2 0 0
## ocho 1 5 0 1 1 139 1 0 0 1
## seis 0 0 0 2 0 0 158 0 0 0
## siete 0 0 4 1 1 3 0 161 0 0
## tres 0 3 1 4 0 5 0 0 177 1
## uno 0 0 1 1 0 0 1 0 0 235
##
## $`Precisión Global`
## [1] 0.9677246
##
## $`Error Global`
## [1] 0.03227542
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9903537 0.9664430 0.9580838 0.9883721 0.9671053 0.9328859 0.9875000 0.9470588
## tres uno
## 0.9267016 0.9873950
##
## $`Precision Positiva`
## [1] 0.9931034
##
## $`Precision Negativa`
## [1] 1
##
## $`Falsos Positivos`
## [1] 0
##
## $`Falsos Negativos`
## [1] 0.006896552
##
## $`Asertividad Positiva`
## [1] 1
##
## $`Asertividad Negativa`
## [1] 0.9967638
modelo <- svm(Numero~., data = taprendizaje, kernel="linear")
prediccion <- predict(modelo,ttesting)
MC<-table(ttesting[,1],prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediccion
## cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 307 1 0 1 0 0 1 0 1 0
## cinco 2 134 3 0 0 1 4 1 4 0
## cuatro 0 0 160 1 0 0 3 1 0 2
## dos 0 0 3 161 1 1 3 0 3 0
## nueve 0 0 3 0 143 0 0 6 0 0
## ocho 2 2 1 1 1 136 0 0 4 2
## seis 0 1 0 1 0 0 158 0 0 0
## siete 1 1 4 0 3 1 0 159 1 0
## tres 0 5 1 3 1 4 0 0 177 0
## uno 0 0 1 0 0 0 1 0 0 236
##
## $`Precisión Global`
## [1] 0.9526627
##
## $`Error Global`
## [1] 0.04733728
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9871383 0.8993289 0.9580838 0.9360465 0.9407895 0.9127517 0.9875000 0.9352941
## tres uno
## 0.9267016 0.9915966
##
## $`Precision Positiva`
## [1] 0.9852941
##
## $`Precision Negativa`
## [1] 0.9967532
##
## $`Falsos Positivos`
## [1] 0.003246753
##
## $`Falsos Negativos`
## [1] 0.01470588
##
## $`Asertividad Positiva`
## [1] 0.9925926
##
## $`Asertividad Negativa`
## [1] 0.9935275
modelo <- svm(Numero~., data = taprendizaje, kernel="polynomial")
prediccion <- predict(modelo,ttesting)
MC<-table(ttesting[,1],prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediccion
## cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 306 1 0 2 0 2 0 0 0 0
## cinco 0 144 1 1 0 1 1 0 1 0
## cuatro 0 0 162 1 1 1 1 0 0 1
## dos 0 0 1 166 0 4 0 0 1 0
## nueve 0 0 1 0 149 1 0 1 0 0
## ocho 0 2 0 0 0 146 0 0 1 0
## seis 0 0 0 2 0 1 157 0 0 0
## siete 0 0 5 0 4 3 0 158 0 0
## tres 0 3 1 2 0 4 0 0 181 0
## uno 0 1 2 0 0 0 1 0 0 234
##
## $`Precisión Global`
## [1] 0.9698763
##
## $`Error Global`
## [1] 0.03012372
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9839228 0.9664430 0.9700599 0.9651163 0.9802632 0.9798658 0.9812500 0.9294118
## tres uno
## 0.9476440 0.9831933
##
## $`Precision Positiva`
## [1] 1
##
## $`Precision Negativa`
## [1] 0.9967427
##
## $`Falsos Positivos`
## [1] 0.003257329
##
## $`Falsos Negativos`
## [1] 0
##
## $`Asertividad Positiva`
## [1] 0.9931034
##
## $`Asertividad Negativa`
## [1] 1
modelo <- svm(Numero~., data = taprendizaje, kernel="sigmoid")
prediccion <- predict(modelo,ttesting)
MC<-table(ttesting[,1],prediccion)
indices.general(MC)
## $`Matriz de Confusión`
## prediccion
## cero cinco cuatro dos nueve ocho seis siete tres uno
## cero 288 12 3 3 0 1 2 0 2 0
## cinco 9 118 3 0 1 4 0 1 13 0
## cuatro 4 1 152 1 1 4 3 0 0 1
## dos 10 0 4 146 0 3 8 1 0 0
## nueve 1 2 2 0 141 0 0 6 0 0
## ocho 4 4 2 0 1 132 1 1 3 1
## seis 1 0 0 1 0 0 158 0 0 0
## siete 1 0 4 1 4 3 0 157 0 0
## tres 2 5 1 2 0 5 0 2 172 2
## uno 0 0 1 0 0 0 1 0 0 236
##
## $`Precisión Global`
## [1] 0.9144701
##
## $`Error Global`
## [1] 0.08552985
##
## $`Precisión por categoría`
## cero cinco cuatro dos nueve ocho seis siete
## 0.9260450 0.7919463 0.9101796 0.8488372 0.9276316 0.8859060 0.9875000 0.9235294
## tres uno
## 0.9005236 0.9915966
##
## $`Precision Positiva`
## [1] 0.9291339
##
## $`Precision Negativa`
## [1] 0.96
##
## $`Falsos Positivos`
## [1] 0.04
##
## $`Falsos Negativos`
## [1] 0.07086614
##
## $`Asertividad Positiva`
## [1] 0.9076923
##
## $`Asertividad Negativa`
## [1] 0.969697
Con una precision global de 0.964497 el SVM radial es el que mejor estima la variabilidad del modelo la peor estimacion de svm es con sigmoid una precision global 0.9117805. Los resultados como seria de esperar son iguales aplicando algoritmo SVM y traineR. A diferencia de los metodos de estimacion de las demas tareas el SVM ademas de tener una precision global alta, tambien tiene una precision por categoria bastante elevada en todos los numeros. Es decir kvecinos tambien tuvo una precision global alta pero no es preciso con todos los numeros por igual. Debe senalarse que de los modelos anteriores el de arboles de decision tiene peor desempeno. A pesar de ello, puede senalarse la red neuronal tanto nnet como neuralnet tardan mucho en procesar los datos, mucho mas que en el caso de los kvecinos, por lo que, para el uso de equipo con baja capacidad de procesamiento puede resultar mas optimo SVM o incluso kvencinos. En el caso de los kvecinos se obtuvo precision global de 0.9585799, aun con kvecinos es superior que con la aproximacion de redes nnet (0.8682087).
Pregunta 4: [25 puntos] Suponga que se tiene la siguiente tabla de datos:
library ( plotly )
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
datos <- data.frame(x = c(1, 1, 1, 3, 1, 3, 1, 3, 1), y = c(0, 0, 1, 1, 1, 2, 2, 2, 1), z = c(1, 2, 2, 4, 3, 3, 1, 1, 0), clase = c(" Rojo ", " Rojo ", " Rojo ", " Rojo ", " Rojo ", " Azul "," Azul ", " Azul ", " Azul "))
plot_ly (data = datos) %>% add_trace (x = ~x, y = ~y, z = ~z, color = ~clase, colors = c("#0C4B8E", "#BF382A"), mode = "markers ", type = "scatter3d")
getwd()
## [1] "C:/Users/rzamoram/Documents/Machine Learning/Mineria de Datos I/Clase5"
setwd("C:/Users/rzamoram/Documents/Machine Learning/Mineria de Datos I/Clase3")
library ( plotly )
observaciones <- data.frame(x = c(1, 1, 1, 3, 1, 3, 1, 3, 1),
y = c(0, 0, 1, 1, 1, 2, 2, 2, 1),
z = c(1, 2, 2, 4,3, 3, 1, 1, 0),
clase = c(" Rojo ", " Rojo ", " Rojo ", " Rojo ", " Rojo ", " Azul "," Azul ", " Azul", " Azul "))
observaciones$clase <- as.factor(observaciones$clase)
ggplot() +
geom_point(data = observaciones, aes(x = x, y = y, color = clase), size = 4) +
theme_bw() +
labs(title = "Posibles hiperplanos de separación") +
theme( legend.position = "none",
plot.title = element_text(hjust = 0.5, size = 11))
ecuacion de hiperplano = x+y+0.5z+0.5=0
x1 <- c(1, 1, 1, 3, 1, 3, 1, 3, 1)
x2 <- c(0, 0, 1, 1, 1, 2, 2, 2, 1)
y <- c(" Red ", " Red ", " Red ", " Red ", " Red ", " Blue "," Blue ", " Blue ", " Blue ")
m1 <- (4-2)/(4-2) # m = (y2-y1)/(x2-x1)
b1 <- 4-1*4 # b = y -mx
m2 <- (3-1)/(4-2)
b2 <- 3-1*4
library(plotrix)
##
## Attaching package: 'plotrix'
## The following object is masked from 'package:scales':
##
## rescale
bbdd <- data.frame(x1,x2,y)
plot(x1,x2,xlim=c(0,8),ylim=c(0,8),col=c(y))
legend("topleft",
c("h(x)=x+0, vectores de soporte: (2,2) y (4,4)",
"Hiperplano no óptimo: x1-x2-0.25=0",
"Hiperplano: x1-x2-0.5 = 0",
"g(x)=x-1, vectores de soporte: (2,1) y (4,3"), cex=0.7, col=c("red","green", "black","blue"), lty=c(2,1,1,2))
abline (b1,m1,col="red",lty=2)
abline (b2,m2,col="blue",lty=2)
abline (-0.5,1)
abline (-0.25,1,col="green")
arrows(6.3,4,6,5,length=0.1)
arrows(5.5,7,5.8,5.8,length=0.1)
legend(5.5,3.8,"margen",cex=0.7,bty="n")
legend("bottomright","Círculos: vectores de soporte",cex=0.6)
draw.circle(2,2,0.25)
draw.circle(4,4,0.25)
draw.circle(2,1,0.25)
draw.circle(4,3,0.25)
hiperplano optimo = x-y-0.5z-0.5=0 vectores de soporte = (2,2), (4,4) y (2,2) vectores de soporte = (2,1), (4,3) y (2,1)
Esta octava observacion se encuentra bastante separada y alejada de la linea de separacion caracteristica del SVM por lo que pequenos cambios no deberian afectar la distincion entre variables.
x1 <- c(1, 1, 1, 3, 2, 1, 1, 3, 1)
x2 <- c(1, 0, 1, 2, 1, 0, 2, 2, 1)
y <- c(" Red ", " Red ", " Red ", " Red ", " Red ", " Blue "," Blue ", " Blue ", " Blue ")
m1 <- (4-2)/(4-2) # m = (y2-y1)/(x2-x1)
b1 <- 4-1*4 # b = y -mx
m2 <- (3-1)/(4-2)
b2 <- 3-1*4
library(plotrix)
bbdd <- data.frame(x1,x2,y)
plot(x1,x2,xlim=c(0,8),ylim=c(0,8),col=c(y))
legend("topleft",
c("h(x)=x+0, vectores de soporte: (2,2) y (4,4)",
"Hiperplano no óptimo: x1-x2-0.25=0",
"Hiperplano: x1-x2-0.5 = 0",
"g(x)=x-1, vectores de soporte: (2,1) y (4,3"), cex=0.7, col=c("red","green", "black","blue"), lty=c(2,1,1,2))
abline (b1,m1,col="red",lty=2)
abline (b2,m2,col="blue",lty=2)
abline (-0.5,1)
abline (-0.25,1,col="green")
arrows(6.3,4,6,5,length=0.1)
arrows(5.5,7,5.8,5.8,length=0.1)
legend(5.5,3.8,"margen",cex=0.7,bty="n")
legend("bottomright","Círculos: vectores de soporte",cex=0.6)
draw.circle(2,2,0.25)
draw.circle(4,4,0.25)
draw.circle(2,1,0.25)
draw.circle(4,3,0.25)
Aqui se denota dificultad para separar los casos de hecho se traslapan no hay hiperplano de separaacion Ecuacion hiperplano = x1-x2-0.5=0 Ecuacion no optimo = x1 - x2-0.25=0
bbdd <- data.frame(x1,x2,y)
plot(x1,x2,xlim=c(0,8),ylim=c(0,8),col=c(y))
abline (b1,m1,col="red",lty=2)
abline (b2,m2,col="blue",lty=2)
abline (-0.5,1)
points(2,7,col="blue")
legend(0,7,"separable",cex=0.6,bty="n")
(2,7 resulta no separable) Hiperplano: x1-x2-2.7 = 0